/**
 * 用 createConnection 创建 Mysql 连接，每执行一次 connection.query 都是一个全新的连接，会造成一个资源的极大浪费，降低性能。
 * 连接池是另外的一种执行方法，它一次性的创建了多个连接，然后根据客户端的查询，自动的 分发、复用、管理 这些连接。
 */
const mysql = require('mysql');
const { DBCONFIG } = require('../config');

/**
 * 链接池：创建多个链接、复用与分发链接
 */
const pool = mysql.createPool(DBCONFIG);

/**
 * [query description]
 * @return {[type]} [description]
 */
// 第一个参数是 SQL 操作字符串，第二个数组
exports.query = function (sql, params) {
    params = params || [];

    console.log('sql=>', sql);
    console.log('params=>', JSON.stringify(params));

    return new Promise((resolve, reject) => {
        // 从连接池中取出连接。getConnection方法。如无连接可用则隐式的建立一个数据库连接。
        pool.getConnection(function (err, connection) { // 回调函数中的 err 为错误对象，connection 为获取到的连接对象。
            if (err) reject(err);
            else {
                connection.query(sql, params, (err, result, fields) => {
                    if (err) reject(err);
                    else resolve(result);

                    // 当连接不再使用时，用connection对象的release方法将其归还到连接池中。connection.release();
                    connection.release();
                })
            }
        });
    });
}
